package com.cskaoyan.javase.oop1._4compare;
/**
 * 成员变量 vs 局部变量
 * 局部变量和成员变量是Java程序开发时
 * 最常见的两种变量类型，所以一定要搞清楚，它们之间的不同。
 *
 * 比较的方式
 * 局部变量和成员变量的比较，我们从以下五个方面去比较：
 *      1.在类中定义的位置不同
 *          成员变量: 定义在成员位置
 *              成员位置: 类体中,局部位置以外,也就是直接在类体中定义
 *                  就属于成员位置.
 *          局部变量: 定义在局部位置
 *              局部位置: 类体中,包括方法体,类体中的大括号,以及上述结构中的大括号,"代码块"就是局部位置
 *
 *      2.在内存中的位置不同
 *          成员变量: 堆上对象中
 *          局部变量: JVM栈上
 *
 *      3.生命周期不同
 *          成员变量: 和对象"同生共死"
 *              当然只要对象成为垃圾,实际上成员变量就没有意义了.
 *          局部变量: 和方法调用"同生共死"
 *
 *      4.(重点)有无默认初始化不同
 *          成员变量: 有默认初始化,无需程序员手动初始化,就可以直接使用
 *          局部变量: 没有默认初始化,必须手动初始化赋值,才能够使用.
 *
 *      5.作用范围
 *          局部变量: 仅在大括号内部
 *          成员变量: 整个类体中都可以访问
 *              但是
 *              成员方法可以任意访问同类中的成员变量
 *              静态(static修饰的)方法 不能够直接访问成员变量
 *
 * @since 16:34
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    {
        {

        }
    }
    public static void main(String[] args) {
        {

        }
    }
}
class A{
    int num;
    public void test(){
        System.out.println(num);
    }
    public static void testStatic(){
        // Non-static field 'num' cannot be referenced from a static context
        // System.out.println(num);
    }
}